package com.mingqijia.gassafety.webserver.service.workorder;

import com.mingqijia.gassafety.shared.utils.commonUtils.PageUtil;
import com.mingqijia.gassafety.webserver.request.workorder.asst.OrgInfoRequest;
import com.mingqijia.gassafety.webserver.request.workorder.asst.ScheduleDateRequest;
import com.mingqijia.gassafety.webserver.request.workorder.asst.WorkOrderCreateRequest;
import com.mingqijia.gassafety.shared.dto.OrderCancelDTO;
import com.mingqijia.gassafety.webserver.request.workorder.order.OrderCreateRequest;
import com.mingqijia.gassafety.webserver.response.workorder.asst.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 工单记录表 服务类
 * </p>
 *
 * @author guoliang.lao
 * @since 2022-09-15
 */
public interface AsstWorkOrderService {
    /**
     * 查询业务线，业务类型
     * @return
     */
    List<BizResponse> getBizList(String spId);
    /**
     * 查询服务内容、服务项目
     * @param pCode
     * @return
     */
    List<BizServeResponse> getServeList(String pCode,String spId);
    /**
     * 查询可派单时间
     * @param params
     * @return
     */
    List<SchedulingDateResponse> getOrderDate(ScheduleDateRequest params);
    /**
     * 查询历史工单
     * @param imei
     * @param page
     * @param pageSize
     * @return
     */
    PageUtil<HistoryListResponse> historyList(String imei, Integer page, Integer pageSize);
    /**
     * 查询进行中的工单
     * @param imei
     * @param page
     * @param pageSize
     * @return
     */
    PageUtil<WorkingOrderListResponse> workingOrderList(String imei, Integer page, Integer pageSize);
    /**
     * 创建工单
     * @param params
     */
    Long create(WorkOrderCreateRequest params);

    /**
     * 创建工单2.0
     * @param params
     * @return
     */
    String createV2(OrderCreateRequest params);

    /**
     * 请求部门参数
     * @return
     */
    List<OrgInfoResponse> getDeptList(OrgInfoRequest params);

    /**
     * 根据设备号和工单状态查询工单列表
     * @param imeiList
     * @param orderStatuses
     * @return
     */
    Map getOrderCountByImei(List<String> imeiList, List<Integer> orderStatuses);

    /**
     * 查询某一天的所有班次对应剩余工作量
     * @return
     */
    List<ServicerSchedulingResponse> queryScheduleSurplusCount(String date,String lineBizCode,String bizCode,String spId);

    /**
     * 日期时间段内的每日剩余可排工作量
     * @param lineBizCode
     * @param bizCode
     * @param startDate
     * @param endDate
     * @return
     */
    List<SchedulingSumCountResponse> getSurplusCountByDate(String lineBizCode, String bizCode,
                                                           String startDate, String endDate,String spId);

    /**
     * 取消工单
     * @param params
     * @return
     */
    void cancelOrderV2(OrderCancelDTO params);

    /**
     * 获取时刻助手工单map
     * @param orderNos
     * @return
     */
    Map<String, AsstOrderListResponse> getOrdersMap(List<String> orderNos,List<String> spIds) ;
}
